//
//  main.m
//  ARC
//
//  Created by admin on 2019/8/4.
//  Copyright © 2019 猫爷爷的酱醋茶. All rights reserved.
//

/*
 
 ARC
    是编译机制，在编译器编译代码的时候，会在适合的位置加入retain、release、autorelease代码。
    永远不要手动的添加这些代码。
 
 对象何时被释放？
    本质：对象的引用计数器为0的时候，自动释放
    表象：只要没有强指针指向这个对象，这个对象就会立即被回收
         或者将所有指向对象的强指针赋值为nil的时候，这个对象就被立即回收。
  注意：
    不能创建对象用一个弱指针存储这个对象的指针，这样的话，刚创建出来的对象，就没有任何强指针指向，创建出来就被回收。
 
 特点：
    a）在ARC机制下，当对象被回收的时候，原来指向这个对象的弱指针会被自动设置为nil。
    b）在ARC机制下，@property参数不能使用retain，而是使用strong
       因为retain代表生成的setter方法是标准MRC的内存管理代码
    c）在ARC机制下，需要关注的重点是，当一个类的属性为OC对象的时候，这个属性应该声明为强类型还是弱类型。
       当两个对象相互引用的时候，如果两边都使用strong 那么就会造成内存泄漏
        解决方案： 一端使用strong 一端使用weak
 
 
 强指针
    默认情况下，我们声明一个指针，这个指针就是强指针
    我们也可以使用 __strong 来显示声明这是一个强指针
 
 弱指针
    使用 __weak 标识的指针。
 
 
 MRC和ARC的兼容
    a）ARC兼容MAC
    程序使用的是ARC开发，但是其中有些类是用MRC开发的
    这个时候需要在 Target - Build Phases - Compile Source - 双击需要使用MRC编译的文件 输入命令 -fno-objc-arc
 
    b）MRC转换ARC
    Edit - Convert - To Objective-C ARC...
 
 
 */

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        Person *p1 = [[[Person alloc]init]];
    }
    return 0;
}
